/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.myapp.model.DAO.Administrator.Users;

import com.myapp.model.DAO.HibernateUtil;
import com.myapp.model.estados.Estados;
import com.myapp.model.usuarios.Usuarios;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.CriteriaSpecification;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author Tarde
 */
public class AdminUserDao {
    /**
     * Metodo que borra un usuario 
     * @param Usuarios u 
     */
    public void deleteUser(Usuarios u)
    {
        //Obtener la sesión actual 
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        
        byte b = 4; // Se le pone codigo 4 Desactivado
        Estados e = new Estados();
        e.setIdestado(b);
        
        try {
            //Comenzar la transacción 
            session.beginTransaction();
            //localizarlo en la sesion
            Integer id = u.getIdusuario();
            u = (Usuarios) session.get(Usuarios.class,id);
            u.setEstados(e);
            //le cambiamos el estado a desactivado
            
            session.update(u);
            session.getTransaction().commit();
            
            } catch (HibernateException err) {
                session.getTransaction().rollback();
            } // fin catch
    } // fin metodo deleteUser
    /**
     * Metodo para listar los usuarios
     * @return List
     */
    public List<Usuarios> listUser()
    {
        //Obtener la sesión actual 
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
         List lista = null;
        try {
            //Comenzar la transacción 
            session.beginTransaction();
            //Obtener la lista de usuarios
            //lista = session.createQuery("from Usuarios").list();
            lista = session.createCriteria(Usuarios.class).
                    createAlias("estados","es",CriteriaSpecification.LEFT_JOIN).
                    list();
            //Confirmar transacción 
            session.getTransaction().commit();
        } catch (HibernateException err){
            session.getTransaction().rollback();
        } 
        return lista;
    }  // fin listar 
    /**
     * Metodo que actualiza los datos del usuario
     * @param Usuarios usr
     * @return Usuarios
     */
    public Usuarios updateUser(Usuarios usr) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        try {
            session.beginTransaction();
            session.update(usr);
            session.getTransaction().commit();
        } catch (HibernateException err) {
            session.getTransaction().rollback();
        }

        //Llamada a la funcion de Java Mail para autentificar al usuario
        return usr;
    }
    /**
     * Metodo que busca un unico usuario por su id
     * @param Usuarios usr
     * @return Usuarios
     */
    public Usuarios buscarPorId(Usuarios usr) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        try {
            session.beginTransaction();

            //Consulta de comprobacion de login y password correctos
            usr = (Usuarios) session.createCriteria(Usuarios.class).
                    add(Restrictions.eq("idusuario", usr.getIdusuario())).uniqueResult();
            session.getTransaction().commit();

        } catch (HibernateException err) {
            session.getTransaction().rollback();
        }
        return usr;
    }
    
    
}
